\chapter{Algoritme dan Pemrograman} \label{ch:algoritme-dan-pemrograman}
\lecture{Algoritme dan Pemrograman}{bab 1}


\ifthenelse{\boolean{adaTIU}}{
	\begin{footnotesize}
		\begin{description}
			\item[Tujuan Pembelajaran]:
			\begin{itemize}
				\item Memberikan pengertian tentang pentingnya pengetahuan pemrograman dalam teknologi informasi
				\item Memberikan pengertian tentang proses yang harus dilakukan dalam membuat suatu program
				\item Memberikan pengertian tentang Algoritma, Pseudocode dan Program
			\end{itemize}
			\item[Setelah menyelesaikan modul ini mahasiswa diharapkan dapat]:
			\begin{itemize}
				\item Menuliskan tahap-tahap dalam pembuatan program
				\item Menuliskan langkah-langkah yang ada pada algoritma
				\item Menulis algoritma dengan menggunakan flowchart dan pseudocode 
				\item Menuliskan algoritma untuk suatu masalah sederhana
				\item Menuliskan hal-hal yang perlu dilakukan untuk menerjemahkan algoritma menjadi program
				\item Menuliskan ciri-ciri suatu program terstruktur
				\item Menjelaskan fungsi dari translator
				\item Menjelaskan pentingnya dokumentasi program
			\end{itemize}
			\item[Kata kunci]:
			
			Algoritma, Pemrograman Terstruktur, Program, Pseudocode, Translator, Kode Sumber, Kode Biner
			\bigskip
		\end{description}
	\end{footnotesize}
}


\section{Pendahuluan}

\begin{frame}
Semua hal yang dapat dilakukan oleh suatu komputer tidak lain berasal dari program atau kumpulan instruksi yang dibuat oleh manusia untuk mengendalikan kerja komputer tersebut. Pada awal keberadaannya, komputer mempunyai ukuran yang besar dan terdiri atas banyak tombol. Instruksi untuk mengendalikan komputer dilakukan dengan cara menghidupkan/mematikan (on/off) tombol-tombol yang ada pada komputer. Dengan demikian maka hampir seluruh aktivitas komputer pada saat itu memerlukan campur tangan manusia.

Pada saat ini bentuk dan kemampuan komputer telah banyak mengalami perkembangan sehingga untuk membuat komputer bekerja, manusia tidak perlu lagi memberikan instruksi dengan cara menghidupkan/mematikan tombol-tombol. Dengan adanya \index{sistem operasi} sistem operasi (\emph{operating system}) dan berbagai perangkat lunak penerjemah (translator), maka instruksi dengan kata-kata yang ditulis dalam kaidah tertentu (disebut sebagai source program atau \index{source code@\emph{source code}} \emph{source code}) untuk kemudian diterjemahkan menjadi menjadi kode-kode biner (ekivalen dengan on/off tombol) yang dapat mengendalikan kerja komputer.

Dengan cara pemrograman, pelaksanaan suatu pekerjaan yang semula merupakan sekumpulan instruksi yang sangat panjang dapat dipersingkat hanya dengan memanggil nama file yang merupakan instruksi untuk komputer dalam kode biner. Karena demikian pentingnya kegiatan pemrograman dalam pengembangan komputer, maka kegiatan pemrograman dikatakan sebagai inti dari semua aktivitas pengembangan komputer. Dalam bidang ilmu Teknologi Informasi, banyak orang menyatakan bahwa pemrograman merupakan jantung dari disiplin bidang ilmu tersebut.
\end{frame}


\section{Program dan Algoritme}

Program pada umumnya didefinisikan sebagai kumpulan perintah yang dibuat untuk menyelesaikan suatu masalah tertentu. Dalam konteks teknologi komputer program merupakan sesuatu yang dapat dieksekusi dengan menggunakan komputer. Untuk dapat membuat program seorang pemrogram perlu mendefinisikan dahulu apa masalah yang akan dipecahkan dan juga cara penyelesaian masalah tersebut. Uraian langkah-langkah yang jelas dan diperlukan untuk pemecahan masalah disebut sebagai algoritma. Dengan demikian untuk dapat menuliskan suatu program, maka seorang pemrogram terlebih dahulu harus bisa menuliskan algoritma yang diperlukan.

Kinerja suatu algoritma dilihat dari berapa cepatnya algoritma tersebut dalam menyelesaikan masalah. Bila suatu masalah dapat diselesaikan dengan beberapa cara, maka algoritma yang satu dikatakan lebih baik dari yang lain bila waktu pemrosesan program dengan algoritma pertama lebih cepat daripada program yang ditulis berdasarkan algoritma kedua.

Algoritma dapat dituliskan dalam bentuk-bentuk simbol atau diagram yang mempunyai arti tertentu maupun dengan kata-kata yang biasa dipergunakan dalam kehidupan sehari-hari. Penulisan dengan cara pertama disebut sebagai FLOWCHART, sedangkan yang kedua dikenal sebagai PSEUDOCODE. Karena bentuknya yang lebih menyerupai suatu program maka dalam modul ini penulisan algoritma ditulis dalam bentuk pseudocode. 


\section{Pseudocode}

Pseudocode menggunakan kata-kata tertentu untuk merepresentasikan urutan langkah pemecahan masalah. Kata-kata yang dipergunakan tersebut pada umumnya hampir sama maknanya dengan kata-kata kunci yang ada pada bahasa pemrograman. Selain itu dalam pemrograman terstruktur, bentuk penulisan pseudocode mempunyai banyak persamaan dengan bentuk program. Gambar~\ref{fig:pseudocode-bilangan-terbesar} memperlihatkan penulisan algoritma dalam pseudocode untuk pencarian suatu bilangan terbesar. 

%% here
\begin{figure}
\begin{algorithmic}
	\STATE \textsc{BilanganTerbesar} (Data[0..n-1])
	\STATE BilBes \(\leftarrow\) Data[0]
	\FOR{i \(\leftarrow\) 1 \textbf{to} \( n - 1 \)}
		\IF{(BilBes \( < \) Data[i+1])}
			\STATE BilBes \( \leftarrow \) Data[i+1]
		\ENDIF
	\ENDFOR
	\STATE Return BilBes
\end{algorithmic}
\caption{Pseudocode algoritme untuk mencari bilangan terbesar} \label{fig:pseudocode-bilangan-terbesar}
\end{figure}


\section{Teknik Pemrograman}

Bila dahulu pemrograman dapat dipandang sebagai suatu "art", saat ini pemrograman merupakan suatu teknik yang telah mempunyai kaidah-kaidah pemrograman yang sangat membantu para pemrograman. Paradigma terbaru yang dikenal dalam teknik pemrogramanan pada saat ini adalah paradigma yang berorientasi pada obyek (object oriented programming), yang merupakan pengembangan dari teknik pemrograman sebelumnya.

Teknik pemrograman lebih dulu dan masih banyak dipergunakan oleh para pemrogram adalah teknik pemrograman terstruktur (structured programming). Karena pemrograman berorientasi obyek merupakan pengembangan dari pemrograman terstruktur, maka kaidah pemrograman terstruktur ini tetap dipergunakan. Dengan demikian untuk dapat menguasai teknik yang berorientasi pada obyek, seorang pemrograman terlebih dahulu harus tahu teknik pemrograman terstruktur.


\subsection{Pemrograman Terstruktur}

Dalam kehidupan sehari-hari suatu masalah seringkali dapat diselesaikan dengan berbagai cara. Demikian pula halnya masalah yang akan diselesaikan dengan menggunakan komputer, seringkali mempunyai berbagai cara penyelesaian. Namun demikian pada umumnya kita dapat membedakan bahwa dalam hal tertentu cara yang satu lebih baik dari cara yang lain.

Teknik pemrograman terstruktur merupakan suatu teknik pemrograman yang dipercaya dapat memberikan kecepatan dan efisiensi pelaksanaan program yang lebih baik dibandingkan dengan teknik tidak terstruktur (istilah yang diberikan untuk teknik pemrograman yang dilakukan sebelum dikenalnya teknik pemrograman terstruktur). Hal ini disebabkan karena pemrograman terstruktur telah dilengkapi dengan kaidah-kaidah yang dibuat berdasarkan mekanisme atau cara kerja komputer dalam melaksanakan instruksi. Ciri-ciri dari teknik pemrograman terstruktur antara lain adalah:

\begin{itemize}
\item Program dirancang secara top-bottom, yaitu dengan menuliskan langkah-langkah besar dalam pemecahan masalah untuk kemudian merinci menjadi beberapa langkah-langkah yang lebih kecil.
\item Setiap langkah merupakan blok (block) atau struktur (structure) tertentu.
\item Setiap langkah dapat dikategorikan dalam level tertentu. Beberapa langkah yang merupakan rincian dari langkah tertentu mempunyai level yang sama.
\item Setiap blok atau struktur hanya mempunyai satu jalan masuk dan satu jalan keluar.
\item Blok atau struktur yang mempunyai tugas khusus atau seringkali dipergunakan diperlakukan secara khusus dalam bentuk sub program.
\item Tidak ada lonjatan langkah tanpa syarat (unconditional jump).
\end{itemize}

Dengan mengikuti kaidah pada teknik pemrograman terstruktur, maka program yang dihasilkan akan dapat akan dilaksanakan oleh komputer dalam waktu yang lebih cepat dari program yang dibuat tanpa memperhatikan kaidah pemrograman terstruktur.


\subsection{Langkah dalam pemrograman terstruktur}

Suatu permasalahan yang akan diselesaikan dengan cara pemrograman terstrukur akan diuraikan dalam menjadi langkah-langkah pemecahan yang lebih kecil. Dalam setiap penguraian maka hanya akan didapat tiga kemungkinan jenis langkah, yaitu:

\begin{enumerate}
\item Langkah terurut (sequence)

Sekumpulan instruksi yang dilaksanakan urut satu persatu mulai dari yang instruksi pertama, kedua, ketiga, dan seterusnya disebut sebagai langkah terurut (sequence). Suatu masalah yang kompleks pada umumnya tidak cukup hanya diselesaikan dengan langkah terurut saja.

\item Langkah pengambilan keputusan (decision)

Seringkali pelaksanaan suatu langkah memerlukan kondisi/syarat tertentu. Apabila ditemukan kasus dimana sekumpulan intruksi hanya akan dilakukan berdasarkan evaluasi suatu kondisi tertentu, maka langkah yang dilakukan tersebut disebut sebagai langkah pengambilan keputusan. Langkah pengambilan keputusan dapat mempunyai dua alternatif kumpulan instruksi atau lebih yang dapat dipilih berdasarkan kondisi yang harus dievaluasi terlebih dahulu.

\item Langkah pengulangan (repetition)

Seringkali sekumpulan instruksi harus dilaksanakan berkali-kali. Langkah pengulangan merupakan cara untuk melakukan instruksi yang perlu dilakukan secara berulang-ulang. Jumlah pengulangan yang perlu dilakukan dalam langkah pengulangan dapat tertentu maupun tidak tertentu. Dalam hal langkah pengulangan tertentu, instruksi akan dilaksanakan sebanyak jumlah pengulangan yang telah ditentukan, sedangkan bila jumlah pengulangan belum tertentu langkah pengulangan akan dihentikan berdasarkan evaluasi terhadap kondisi penghentian (stopping condition).

\end{enumerate}


\section{Pembuatan Program}

Bila suatu algoritma suatu permasalahan telah dapat dituliskan secara rinci, maka hal berikutnya yang harus dilakukan adalah memilih suatu bahasa pemrograman yang mampu melaksanakan operasi yang diperlukan oleh algoritma tersebut. Dengan pengetahuan syntax dari bahasa pemrograman yang dipilih, setiap langkah rinci algoritma ditulis menjadi kode sumber program (source code) dalam suatu file. Untuk dapat menjalankan program tersebut, file kode sumber tersebut harus diterjemahkan dengan mengunakan penterjemah (translator) bahasa pemrograman menjadi kode biner dalam bentuk executable file yang telah dapat dijalankan pada system operasi.


\section{Dokumentasi Program}

Dalam membuat program seorang pemrogram seringkali menuliskan dahulu rancangan langkah-langkah atau algoritma yang akan dilakukannya. Selanjutnya tulisan/rancangan tersebut dapat dijadikan dokumentasi dari algoritma program yang dibuatnya. Dokumentasi tersebut suatu saat akan berguna untuk mengingatkan kembali apa yang telah dilakukan dan dokumentasi juga dapat dipergunakan untuk dijadikan acuan atau referensi apabila kelak akan melakukan perbaikan/penyempurnaan.

Dalam pembuatan suatu perangkat lunak yang kompleks dan melibatkan banyak orang, dokumentasi algoritma menjadi mutlak diperlukan. Selain untuk pengingat, dokumentasi program berguna sebagai sarana komunikasi antar pelaksana yang terlibat dalam pembuatan perangkat lunak tersebut. Pada umumnya dokumentasi dari program tidak lain merupakan suatu statement yang merupakan komentar yang tidak diterjemahkan oleh penerjemah bahasa pemrograman menjadi kod biner)   dalam program tersebut yang  akan berisi pseudocode atau flowchart yang telah dilengkapi dengan berbagai penjelasan untuk memudahkannya. Bentuk penulisan dokumentasi dari suatu program khususnya yang menggunakan pseudocode akan sangat membantu pembacaan dokumentasi tersebut.


\section{Soal-soal latihan dan bahan diskusi}

\begin{Soal}
Berikan pendapat saudara mengenai kelebihan dan kekurangan penulisan algoritma dalam bentuk  FLOWCHART dan PSEUDOCODE
\end{Soal}

\begin{Soal}
Tuliskan jenis tiga langkah yang ada dalam pelaksanaan suatu algoritma
\end{Soal}

\begin{Soal}
Tuliskan persamaan dan perbedaan antara interpreter dengan compiler
\end{Soal}

\begin{Soal}
Apa yang dimaksud dengan perancangan algoritma/program secara secara top-bottom
\end{Soal}

\begin{Soal}
Buatlah algoritma untuk mencari bilangan terkecil dari sekumpulan bilangan
\end{Soal}

\begin{Soal}
Implementasikan algoritma untuk mencari bilangan terbesar dengan menggunakan bahasa pemrograman C
\end{Soal}

\begin{Soal}
Jelaskan mengapa dokumentasi program diperlukan
\end{Soal}
